//shopCart 购物车的小仓库
import { reqCartList , reqDeleteCartById , reqUpdateCheckedById} from "@/api";

const state = {
    cartList:[]
}
const mutations = {
    GETCARTLIST(state,cartList){
      state.cartList=cartList
    }
}
const actions = {
    //获取购物车列表数据
    async getCartList({ commit }) {
        let result = await reqCartList()
        if(result.code == 200){
            commit('GETCARTLIST',result.data)
        }
    },
    //删除购物车某一个产品
  async deleteCartListBySkuId({commit},skuId){
        let result = await reqDeleteCartById(skuId)
        if(result.code==200){
            return 'ok'
        }else{
            return Promise.reject(new Error('faile'))
        }
    },
    //修改购物车某一个产品的选中状态
   async updateCheckedById({commit},{skuId,isChecked}){
      let result = await  reqUpdateCheckedById(skuId,isChecked)
      if (result.code==200) {
        return 'ok'
      }else{
        return Promise.reject(new Error('faile'))
      }
    },
    //删除全部勾选的产品
    deleteAllCheckedCart({dispatch,getters}){
       //context:小仓库,commit【提交mutations修改state】  getters【计算属性】 dispatch【派发actions】 state【当前仓库数据】
       //获取购物车中全部的产品（是一个数组）
       let PromiseAll=[]
       //先进行if判断 数组为空的话  其属性为undefined  该操作是为了避免此bug提示
       if(getters.cartList.cartInfoList){
        getters.cartList.cartInfoList.forEach(item => {
          //判断物品信息是否勾选  如果勾选就派发deleteCartListBySkuId  删除
         let promise = item.isChecked=='1'?dispatch('deleteCartListBySkuId',item.skuId):''
         PromiseAll.push(promise)
      })
       }
       
    //只要全部的p1|p2...都成功，返回的结果都成功
    //如果有一个失败，返回的即为失败的结果
    return Promise.all(PromiseAll)
    },
    //修改全部产品选定状态
    updateAllCartIsChecked({dispatch,state},isChecked){
      //数组
      let PromiseAll=[]
      //先进行if判断  在购物车为空时再点全选按钮会报错，cartList数组内有内容才修改
      if(state.cartList[0]){
        state.cartList[0].cartInfoList.forEach(item=>{
            let promise =dispatch('updateCheckedById',{skuId:item.skuId,isChecked})
            PromiseAll.push(promise)
            })
      }
      return Promise.all(PromiseAll)
    }

}
const getters = {
    cartList(state){
       return state.cartList[0]||[] 
    },
   
}

export default {
    state,
    mutations,
    actions,
    getters
}